#ifndef _BLOCK_H_
#define _BLOCK_H_

#include"Common.h"
#include"AABB.h"

#include<memory>
#include<string>
#include<vector>

namespace Craft{

class Chunk;
class BlockType;
class BlockManger;

enum bType{tBLOCK,tPLANT};

/*
	@brief 
*/
class Block
{
public:
	Block():
		m_Id(0),
		m_pos(0),
		m_size(1.0f),
		m_lightOpacity(16),
		m_lightValue(1),
		m_type(tBLOCK),
		m_chunk(nullptr)
	{
	}

	Block(uint32_t id) :
		m_Id(id),
		m_pos(0),
		m_size(1.0f),
		m_lightOpacity(16),
		m_lightValue(1),
		m_type(tBLOCK),
		m_chunk(nullptr)
	{
	}

	virtual ~Block()
	{}

	const GLuint    get_Id()const;
	const GLfloat   get_size()const;
	const glm::vec3 get_pos()const;			// 获取相对chunk的坐标
	const glm::vec3 get_world_pos()const;	// 获取世界坐标
	const glm::vec3 get_lb_pos()const;		// 获取其左下角坐标
	const GLuint    get_type()const;
	const GLuint    get_lightValue()const;
	const GLuint    get_lightOpacity()const;
	
	Chunk*get_chunk();
	void  set_chunk(Chunk* chunk);

	AABB  get_BoundingBox();

	void set_Id(const GLuint& id);
	void set_pos(const glm::vec3& pos);		
	void set_type(const GLuint& t);
	void set_lightValue(const GLuint value);
	void set_lightOpacity(const GLuint opacity);

	bool intersection(const glm::vec3& orgin, const glm::vec3& dir, HitInfo& hitInfo);

private:

	GLuint     m_Id;
	GLfloat    m_size;
	glm::vec3  m_pos;			// 相对对应chunk坐标
	GLuint     m_type;
	GLuint     m_lightOpacity;
	GLuint     m_lightValue;

	Chunk*	   m_chunk;
	// BlockType  m_type;			
};


// 描述方块的固有属性
class BlockType					// 需要一个方块类型管理类，管理注册了的方块类型
{
public:
	GLuint Id;
	GLuint lightOpacity;

};




}

#endif